package com.dcy.daily.skill.jvm.memoryAlloc.gcAndAllocation;

/**
 * @author duanchunyu
 * @version 1.0.0
 * @Description 学习JVM的测试用例，内存分配与回收策略 P130 开始
 * 设置JDK1.8的GC为Serial+SerialOld
 * @createTime 2021年05月23日 20:03:00
 */
public class ObjectAllocInEden {
    private static final int _1MB = 1024 * 1024;

    /**
     * @description 对象优先在Eden分配，对用JVM书P130页
     * 优先在Eden中分配用例，若Eden空间不够后，会在老年代进行分配。
     * 若Eden空间不够，发生一次Minor GC，然后在进行分配。
     * -verbose:gc -Xms20M -Xmx20M -Xmn10M
     * -XX:+UseSerialGC -XX:+PrintGCDetails -XX:SurvivorRatio=8
     * @author duanchunyu
     * @updateTime 2021/5/23 20:05
     * @throws
     */
    public static void priorityAllocationInEden(){
        byte[] allocation1,allocation2,allocation3,allocation4;
        allocation1 = new byte[2 * _1MB];
        allocation2 = new byte[2 * _1MB];
        allocation3 = new byte[2 * _1MB];
    }

    /**
     * @description 大对象直接进入老年代
     * -verbose:gc -Xms20M -Xmx20M -Xmn10M
     * -XX:+UseSerialGC -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=3145728
     *
     * -XX:PretenureSizeThreshold：指定大于该设置值的对象直接在老年代分配
     * @author duanchunyu
     * @updateTime 2021/5/26 20:23
     * @throws
     */
    public static void bigObjectIntoOldGeneration(){
        byte[] allocation;
        //直接分配到老年代
        allocation = new byte[4 * _1MB];
    }

    /**
     * @description 长期存活的对象将进入老年代
     * -verbose:gc -Xms20M -Xmx20M -Xmn10M
     * -XX:+UseSerialGC -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1
     *
     * -XX:MaxTenuringThreshold：对象晋升老年代阈值
     * @author duanchunyu
     * @updateTime 2021/5/26 20:35
     * @throws
     */
    public static void longLifeIntoOldGeneration(){
        byte[] allocation1,allocation2,allocation3;
        allocation1 = new byte[_1MB/1000];
        allocation2 = new byte[4 * _1MB];
        allocation3 = new byte[4 * _1MB];
        allocation3 = null;
        allocation3 = new byte[4 * _1MB];
    }

    public static void main(String[] args) {
        longLifeIntoOldGeneration();
    }
}
